import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ProInfoVO, ProInfoForm, ProInfoQuery, ProReceiveStatisticVo } from './types';

/**
 * 查询项目信息列表(分页)
 * @param query
 * @returns {*}
 */
export const pageListProInfo = (query?: ProInfoQuery): AxiosPromise<ProInfoVO[]> => {
  return request({
    url: '/pro/info/pageList',
    method: 'get',
    params: query
  });
};

/**
 * 查询项目信息列表（用于项目信息回显查询使用）
 * @param query
 * @returns {*}
 */
export const listProInfoForQuery = (query?: ProInfoQuery): AxiosPromise<ProInfoVO[]> => {
  return request({
    url: '/pro/info/listForQuery',
    method: 'get',
    params: query
  });
};

/**
 * 查询项目信息详细
 * @param id
 */
export const getProInfo = (id: string | number): AxiosPromise<ProInfoVO> => {
  return request({
    url: '/pro/info/' + id,
    method: 'get'
  });
};

/**
 * 重置项目计划审核流程
 * @param proId 项目ID
 * @returns {*}
 */
export const revertPlanAuditFlow = (proId: string | number) => {
  return request({
    url: '/pro/info/revertPlanAudit/' + proId,
    method: 'get'
  });
};

/**
 * 获取项目信息详细信息（用于页面展示）
 * @param id
 */
export const getProDetail = (id: string | number): AxiosPromise<ProInfoVO> => {
  return request({
    url: '/pro/info/detail/' + id,
    method: 'get'
  });
};

/**
 * 新增项目信息
 * @param data
 */
export const addProInfo = (data: ProInfoForm) => {
  return request({
    url: '/pro/info',
    method: 'post',
    data: data
  });
};

/**
 * 修改项目信息
 * @param data
 */
export const updateProInfo = (data: ProInfoForm) => {
  return request({
    url: '/pro/info',
    method: 'put',
    data: data
  });
};

/**
 * 删除项目信息
 * @param id
 */
export const delProInfo = (id: string | number | Array<string | number>) => {
  return request({
    url: '/pro/info/' + id,
    method: 'delete'
  });
};

/**
 * 根据合同ID查询该合同下所有项目（不分页）
 * @param params
 */
export const listProInfo = (query?: ProInfoQuery): AxiosPromise<ProInfoVO[]> => {
  return request({
    url: '/pro/info/list',
    method: 'get',
    params: query
  });
};

/**
 * 周日志部分项目列表（分页）
 * @param query
 * @returns {*}
 */
export const weekLogPageList = (query?: ProInfoQuery): AxiosPromise<ProInfoVO[]> => {
  return request({
    url: '/pro/info/weekLog/list',
    method: 'get',
    params: query
  });
};

/**
 * 项目汇款部分项目列表（分页）
 * @param query
 * @returns {*}
 */
export const receivePageList = (query?: ProInfoQuery): AxiosPromise<ProInfoVO[]> => {
  return request({
    url: '/pro/info/receive/list',
    method: 'get',
    params: query
  });
};

/**
 * 成本消耗项目列表（分页）
 * @param query
 * @returns {*}
 */
export const consumePageList = (query?: ProInfoQuery): AxiosPromise<ProInfoVO[]> => {
  return request({
    url: '/pro/info/consume/list',
    method: 'get',
    params: query
  });
};

/**
 * 查询流程制定需要显示的信息
 * @param query
 */
export const planPageList = (query?: ProInfoQuery) => {
  return request({
    url: '/pro/info/plan/list',
    method: 'get',
    params: query
  });
};

/**
 * 查询流程审核需要显示的信息
 * @param query
 */
export const flowAuditPageList = (query?: ProInfoQuery) => {
  return request({
    url: '/pro/info/flowAudit/list',
    method: 'get',
    params: query
  });
};

/**
 * 查询进度审核需要显示的信息
 * @param query
 */
export const progressAuditPageList = (query?: ProInfoQuery) => {
  return request({
    url: '/pro/info/progressAudit/list',
    method: 'get',
    params: query
  });
};

/**
 * 查询项目关联的合同信息
 * @param id 项目ID
 */
export const queryContract = (id: string | number): AxiosPromise<any> => {
  return request({
    url: '/pro/info/queryContract/' + id,
    method: 'get'
  });
};

/**
 * 工作日志模块查询项目信息（使用listForQuery接口）
 * @param query
 * @returns {*}
 */
export const pageListForQuery = (query?: ProInfoQuery): AxiosPromise<ProInfoVO[]> => {
  return request({
    url: '/pro/info/listForQuery',
    method: 'get',
    params: {
      ...query
    }
  });
};

/**
 * 根据项目ID查询项目下所有收款负责人
 * @param proId 项目ID
 * @returns 收款负责人姓名列表（逗号分隔）
 */
export const getReceiveLeadersByProId = (proId: string | number): AxiosPromise<string> => {
  return request({
    url: `/pro/info/receiveLeaders/${proId}`,
    method: 'get'
  });
};

/**
 * 查询合同回款统计信息列表（用于回款编辑查询）
 * @param conId 合同ID
 * @returns 合同回款统计信息集合
 */
export const listForReceive = (conId: string | number): AxiosPromise<ProReceiveStatisticVo[]> => {
  return request({
    url: `/pro/info/listForReceive/${conId}`,
    method: 'get'
  });
};

/**
 * 根据项目ID获取项目名称（格式：项目名(编号),...）
 * 返回字符串，不返回 AxiosResponse
 */
export const getProjectNamesByIds = async (ids: string): Promise<string> => {
  if (!ids) return '';
  try {
    const res = await request.get<{ data: string }>(`/pro/info/proIdsToNames/${ids}`);
    return res.data || ''; // 直接返回字符串
  } catch (error) {
    console.error('获取项目名称失败:', error);
    return '';
  }
};

